Untitled

추상 클래스(Abstract Class)

추상 클래스란?

추상 클래스 특징

추상 클래스 선언

[접근제어자] abstract class ClassName {
	//공통 필드 선언
	
	//추상 메서드 : 메서드의 body인 { } 블록이 없는 메서드
	//상속받은 하위 클래스는  반드시 재정의 (강제구현)
	[접근제어자] abstract ReturnType methodName1();
	
	// 일반 메소드
	[접근제어자] ReturnType methodName2() {
		//실행문 작성
	};
}

추상 메서드

//추상 메서드 : 메서드의 body인 { } 블록이 없는 메서드
//상속받은 하위 클래스는  반드시 재정의 (강제구현)
[접근제어자] abstract ReturnType methodName1();

추상클래스 활용

part 5, 추상 클래스 (Abstract Class)

🚀 추상클래스 활용: 하위 클래스를 제어하는 효과

1. 일반 클래스 상속 (자율적 구현)

👨‍💼 안팀장: "입금과 출금은 모든 예금에 대해 공통이니 내가 구현했습니다. 상속 받아 구현하되 여러분은 각 예금에 맞는 이자 계산만 해 주세요. 문제 없겠죠???"

public class 예금 {
    private int 돈;

    public void 입금(int 돈) { this.돈 += 돈; }
    public void 출금(int 돈) { this.돈 -= 돈; }

    public double 이자() {
        // 예금의 종류에 따라 이자계산 방식이 다름
        // 기본으로 0.0을 return하고 하위 클래스에 자율적으로 맡김 (Override)
        return 0.0;
    }
}
classDiagram
    direction BT
    class 예금 {
        -int 돈
        +입금(int 돈)
        +출금(int 돈)
        +이자() double
    }
    class 일반예금 {
        +이자() double
    }
    class 정기적금 {
        +리자() double
    }
    class 펀드 {
        +benefit() double
    }

    일반예금 --|> 예금 : 완료 !!! (유책임)
    정기적금 --|> 예금 : 완료 !!! (김수석)
    펀드 --|> 예금 : 완료 !!! (박신입)

2. 추상 클래스 상속 (구현 강제)

👨‍💼 안팀장: "입금과 출금은 모든 예금에 대해 공통이니 내가 구현했습니다. 상속 받아 구현하되 여러분은 각 예금에 맞는 이자 계산만 해 주세요."

public abstract class 예금 {
    private int 돈;

    public void 입금(int 돈) { this.돈 += 돈; }
    public void 출금(int 돈) { this.돈 -= 돈; }

    // 추상 메서드: 하위 클래스에서 반드시 구현해야 함
    public abstract double 이자(); 
}
classDiagram
    direction BT
    class 예금 {
        <>
        -int 돈
        +입금(int 돈)
        +출금(int 돈)
        +이자()* double
    }
    class 일반예금 {
        +이자() double
    }
    class 정기적금 {
        +리자() double
    }
    class 펀드 {
        +benefit() double
    }

    일반예금 --|> 예금 : 완료 !!! (유책임)
    정기적금 --|> 예금 : 에러 !!! (김수석)
    펀드 --|> 예금 : 에러 !!! (박신입)

다양한 객체 생성 방법

Calendar calendar = new Calendar();//추상 클래스 자신의 생성자로 객체 생성(에러)
public abstract class Calendar
exteds Object
implements Serializable, Cloneable, Comparable<Calendar>

하위 클래스를 참조하여 상위(추상) 클래스의 객체 생성(다형성, Polymorphism)

Calendar calendar = new GregorianCalendar();
public class GregorianCalendar extends Calendar

자신의 객체를 리턴하는 static method 이용

Calendar calendar = Calendar.getInstance();
static Calendar getInstance(Locale aLocale)
Gets a calendar using the default time zone and specified locale.
static Calendar getInstance(Locale aLocale)
Gets a calendar using the specified time zone and default locale.
static Calendar getInstance(Locale aLocale)
Gets a calendar with the specified time zone and locale.